package com.egoo.ticket.server.service;

import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.egoo.ticket.server.pojo.dto.CustomFieldInputDto;
import com.egoo.ticket.server.pojo.dto.CustomFieldOutDto;
import com.egoo.ticket.server.pojo.dto.PageOutputDto;
import com.egoo.ticket.server.pojo.entity.CustomField;
import com.egoo.ticket.server.pojo.vo.InteractiveDataVo;
import com.egoo.ticket.server.utils.common.DbResponse;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * @author Administrator
 */
public interface CustomFieldService {
	/**
	 * 通过id或自定义字段
	 * @param id
	 * @return
	 */
	CustomField selectById(Integer id);

	/**
	 * TODO:分页获取
	 * @param currentPage
	 * @param pageSize
	 * @param tenantId
	 * @return
	 */
	PageOutputDto selectAll(Integer currentPage,
							Integer pageSize,
							String tenantId);

	/**
	 * TODO:获取开启的所有自定义字段
	 * @param tenantId
	 * @return
	 */
	CustomFieldOutDto selectAllOpen(String tenantId);

	/**
	 * TODO:批量创建
	 * @param customFieldInputDto
	 * @return
	 */
	Integer insertByBatch(CustomFieldInputDto customFieldInputDto);

	/**
	 * TODO:通过名称获取列表
	 * @param name
	 * @param tenantId
	 * @return
	 */
	List<CustomField> selectByName(String name, String tenantId);

	/**
	 * TODO:通过类型获取列表
	 * @param type
	 * @param tenantId
	 * @return
	 */
	List<CustomField> selectByType(String type, String tenantId);

	/**
	 * TODO:更新用户状态
	 * @param id
	 * @param userId
	 * @param useStatus
	 * @param tenantId
	 * @return
	 */
	Integer updateUseStatus(Integer id, String userId, Integer useStatus, String tenantId);

	/**
	 * TODO:更新字段内容
	 * @param customFieldInputDto
	 * @return
	 */
	Integer updateContent(CustomFieldInputDto customFieldInputDto);

	/**
	 * TODO:删除
	 * @param id
	 * @param tenantId
	 * @return
	 */
	Integer delete(Integer id, String tenantId);

	/**
	 * TODO:获取字段内容信息
	 * @param id
	 * @return
	 */
	JSONObject selectContentById(Integer id);

	/**
	 * TODO:获取所有类型
	 * @param tenantId
	 * @return
	 */
	List<InteractiveDataVo> selectAllType(@Param("tenantId") String tenantId);

	/**
	 * TODO:通过名称和类型获取列表
	 * @param name
	 * @param type
	 * @param currentPage
	 * @param pageSize
	 * @param tenantId
	 * @return
	 */
	DbResponse selectByNameAndType(String name, String type, Integer currentPage,
								   Integer pageSize, String tenantId);
	/**
	 * TODO 通过id获取所有的查询字段列表
	 * @param id
	 * @return
	 */
	List<InteractiveDataVo> selectAllSelectFieldListById(Integer id);

	/**
	 * TODO:获取工单优先级名列表
	 * @param name
	 * @param tenantId
	 * @return
	 */
	List<InteractiveDataVo> selectWorkOrderPriorityByName(String name, String tenantId);

	/**
	 * TOdO:获取工单来源名称列表
	 * @param name
	 * @param tenantId
	 * @return
	 */
	List<InteractiveDataVo> selectWorkOrderSourceByName(String name, String tenantId);

    JSONArray selectByCode(String code, String tenantId);
}
